home *** CD-ROM | disk | FTP | other *** search
/ Revista do CD-ROM 97 / CD-ROM 97 / CD-ROM 97.iso / internet / ghostzilla / ghsetup.exe / chrome / pippki.jar / content / pippki / viewCertDetails.js < prev    next >
Encoding:
Text File  |  2002-04-09  |  8.7 KB  |  254 lines

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  *
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  *
  12.  * The Original Code is mozilla.org code.
  13.  *
  14.  * The Initial Developer of the Original Code is Netscape
  15.  * Communications Corporation.  Portions created by Netscape are
  16.  * Copyright (C) 2001 Netscape Communications Corporation. All
  17.  * Rights Reserved.
  18.  *
  19.  * Contributor(s):
  20.  *  Bob Lord <lord@netscape.com>
  21.  *  Ian McGreer <mcgreer@netscape.com>
  22.  *  Javier Delgadillo <javi@netscape.com>
  23.  */
  24.  
  25. const nsIX509Cert = Components.interfaces.nsIX509Cert;
  26. const nsX509CertDB = "@mozilla.org/security/x509certdb;1";
  27. const nsIX509CertDB = Components.interfaces.nsIX509CertDB;
  28. const nsPK11TokenDB = "@mozilla.org/security/pk11tokendb;1";
  29. const nsIPK11TokenDB = Components.interfaces.nsIPK11TokenDB;
  30. const nsIPKIParamBlock = Components.interfaces.nsIPKIParamBlock;
  31. const nsIASN1Object = Components.interfaces.nsIASN1Object;
  32. const nsIASN1Sequence = Components.interfaces.nsIASN1Sequence;
  33. const nsIASN1PrintableItem = Components.interfaces.nsIASN1PrintableItem;
  34. const nsIASN1Tree = Components.interfaces.nsIASN1Tree;
  35. const nsASN1Tree = "@mozilla.org/security/nsASN1Tree;1"
  36.  
  37. var bundle;
  38.  
  39. function AddCertChain(node, chain, idPrefix)
  40. {
  41.   var idfier = idPrefix+"chain_";
  42.   var child = document.getElementById(node);
  43.   var numCerts = chain.Count();
  44.   var currCert;
  45.   var displayVal;
  46.   var addTwistie;
  47.   for (var i=numCerts-1; i>=0; i--) {
  48.     currCert = chain.GetElementAt(i);
  49.     currCert = currCert.QueryInterface(nsIX509Cert);
  50.     if (currCert.commonName) {
  51.       displayVal = currCert.commonName;
  52.     } else {
  53.       displayVal = currCert.windowTitle;
  54.     }
  55.     if (0 == i) {
  56.       addTwistie = false;
  57.     } else {
  58.       addTwistie = true;
  59.     }
  60.     child = addChildrenToTree(child, displayVal, currCert.dbKey,addTwistie);
  61.   }
  62. }
  63.  
  64. function AddUsage(usage,verifyInfoBox)
  65. {
  66.   var text  = document.createElement("textbox");
  67.   text.setAttribute("value", usage);
  68.   text.setAttribute("style", "margin: 2px 5px");
  69.   text.setAttribute("readonly", "true");
  70.   text.setAttribute("class", "scrollfield");
  71.   verifyInfoBox.appendChild(text);
  72. }
  73.  
  74. function setWindowName()
  75. {
  76.   //  Get the cert from the cert database
  77.   var certdb = Components.classes[nsX509CertDB].getService(nsIX509CertDB);
  78.   var windowReference=document.getElementById('certDetails');
  79.   var myName = self.name;
  80.   bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
  81.   var cert;
  82.  
  83.   var certDetails = bundle.GetStringFromName('certDetails');
  84.   if (myName != "_blank") {
  85.     windowReference.setAttribute("title",certDetails+'"'+myName+'"');
  86.     //  Get the token
  87.     //  XXX ignore this for now.  NSS will find the cert on a token
  88.     //      by "tokenname:certname", which is what we have.
  89.     //var tokenName = "";
  90.     //var pk11db = Components.classes[nsPK11TokenDB].getService(nsIPK11TokenDB);
  91.     //var token = pk11db.findTokenByName(tokenName);
  92.  
  93.     //var cert = certdb.getCertByNickname(token, myName);
  94.     cert = certdb.getCertByNickname(null, myName);
  95.   } else {
  96.     var pkiParams = window.arguments[0].QueryInterface(nsIPKIParamBlock);
  97.     var isupport = pkiParams.getISupportAtIndex(1);
  98.     cert = isupport.QueryInterface(nsIX509Cert);
  99.     windowReference.setAttribute("title", 
  100.                                  certDetails+'"'+cert.windowTitle+'"');
  101.   }
  102.  
  103.   //
  104.   //  Set the cert attributes for viewing
  105.   //
  106.  
  107.   //  The chain of trust
  108.   var chain = cert.getChain();
  109.   AddCertChain("treesetDump", chain, "dump_");
  110.   DisplayGeneralDataFromCert(cert);
  111.   BuildPrettyPrint(cert);
  112. }
  113.  
  114.  
  115. function addChildrenToTree(parentTree,label,value,addTwistie)
  116. {
  117.   var treeChild1 = document.createElement("treechildren");
  118.   var treeElement = addTreeItemToTreeChild(treeChild1,label,value,addTwistie);
  119.   parentTree.appendChild(treeChild1);
  120.   return treeElement;
  121. }
  122.  
  123. function addTreeItemToTreeChild(treeChild,label,value,addTwistie)
  124. {
  125.   var treeElem1 = document.createElement("treeitem");
  126.   if (addTwistie) {
  127.     treeElem1.setAttribute("container","true");
  128.     treeElem1.setAttribute("open","true");
  129.   }
  130.   var treeRow = document.createElement("treerow");
  131.   var treeCell = document.createElement("treecell");
  132.   treeCell.setAttribute("label",label);
  133.   if (value)
  134.     treeCell.setAttribute("display",value);
  135.   treeRow.appendChild(treeCell);
  136.   treeElem1.appendChild(treeRow);
  137.   treeChild.appendChild(treeElem1);
  138.   return treeElem1;
  139. }
  140.  
  141. function displaySelected() {
  142.   var asn1Tree = document.getElementById('prettyDumpTree').
  143.                      treeBoxObject.view.QueryInterface(nsIASN1Tree);
  144.   var items = asn1Tree.selection;
  145.   var certDumpVal = document.getElementById('certDumpVal');
  146.   if (items.currentIndex != -1) {
  147.     var value = asn1Tree.getDisplayData(items.currentIndex);
  148.     certDumpVal.value = value;
  149.   } else {
  150.     certDumpVal.value ="";
  151.   }
  152. }
  153.  
  154. function BuildPrettyPrint(cert)
  155. {
  156.   var certDumpTree = Components.classes[nsASN1Tree].
  157.                           createInstance(nsIASN1Tree);
  158.   certDumpTree.loadASN1Structure(cert.ASN1Structure);
  159.   document.getElementById('prettyDumpTree').
  160.            treeBoxObject.view =  certDumpTree;
  161. }
  162.  
  163. function addAttributeFromCert(nodeName, value)
  164. {
  165.   var node = document.getElementById(nodeName);
  166.   if (!value) {
  167.     value = bundle.GetStringFromName('notPresent');  
  168.   }
  169.   node.setAttribute('value',value)
  170. }
  171.  
  172. function DisplayGeneralDataFromCert(cert)
  173. {
  174.   //  Verification and usage
  175.   var verifystr = "";
  176.   var o1 = {};
  177.   var o2 = {};
  178.   var o3 = {};
  179.   cert.getUsages(o1, o2, o3);
  180.   var verifystate = o1.value;
  181.   var count = o2.value;
  182.   var usageList = o3.value;
  183.   if (verifystate == cert.VERIFIED_OK) {
  184.     verifystr = bundle.GetStringFromName('certVerified');
  185.   } else if (verifystate == cert.CERT_REVOKED) {
  186.     verifystr = bundle.GetStringFromName('certNotVerified_CertRevoked');
  187.   } else if (verifystate == cert.CERT_EXPIRED) {
  188.     verifystr = bundle.GetStringFromName('certNotVerified_CertExpired');
  189.   } else if (verifystate == cert.CERT_NOT_TRUSTED) {
  190.     verifystr = bundle.GetStringFromName('certNotVerified_CertNotTrusted');
  191.   } else if (verifystate == cert.ISSUER_NOT_TRUSTED) {
  192.     verifystr = bundle.GetStringFromName('certNotVerified_IssuerNotTrusted');
  193.   } else if (verifystate == cert.ISSUER_UNKNOWN) {
  194.     verifystr = bundle.GetStringFromName('certNotVerified_IssuerUnknown');
  195.   } else if (verifystate == cert.INVALID_CA) {
  196.     verifystr = bundle.GetStringFromName('certNotVerified_CAInvalid');
  197.   } else { /* if (verifystate == cert.NOT_VERIFIED_UNKNOWN) */
  198.     verifystr = bundle.GetStringFromName('certNotVerified_Unknown');
  199.   }
  200.   var verified=document.getElementById('verified');
  201.   verified.setAttribute("value", verifystr);
  202.   if (count > 0) {
  203.     var verifyInfoBox = document.getElementById('verify_info_box');
  204.     for (var i=0; i<count; i++) {
  205.       AddUsage(usageList[i],verifyInfoBox);
  206.     }
  207.   }
  208.  
  209.   //  Common Name
  210.   addAttributeFromCert('commonname', cert.commonName);
  211.   //  Organization
  212.   addAttributeFromCert('organization', cert.organization);
  213.   //  Organizational Unit
  214.   addAttributeFromCert('orgunit', cert.organizationalUnit);
  215.   //  Serial Number
  216.   addAttributeFromCert('serialnumber',cert.serialNumber);
  217.   //  SHA1 Fingerprint
  218.   addAttributeFromCert('sha1fingerprint',cert.sha1Fingerprint);
  219.   //  MD5 Fingerprint
  220.   addAttributeFromCert('md5fingerprint',cert.md5Fingerprint);
  221.   // Validity start
  222.   addAttributeFromCert('validitystart', cert.issuedDate);
  223.   // Validity end
  224.   addAttributeFromCert('validityend', cert.expiresDate);
  225.   
  226.   //Now to populate the fields that correspond to the issuer.
  227.   var issuerCommonname, issuerOrg, issuerOrgUnit;
  228.   issuerCommonname = cert.issuerCommonName;
  229.   issuerOrg = cert.issuerOrganization;
  230.   issuerOrgUnit = cert.issuerOrganizationUnit;
  231.   addAttributeFromCert('issuercommonname', issuerCommonname);
  232.   addAttributeFromCert('issuerorganization', issuerOrg);
  233.   addAttributeFromCert('issuerorgunit', issuerOrgUnit);
  234. }
  235.  
  236. function updateCertDump()
  237. {
  238.   var asn1Tree = document.getElementById('prettyDumpTree').
  239.                      treeBoxObject.view.QueryInterface(nsIASN1Tree);
  240.  
  241.   var tree = document.getElementById('treesetDump');
  242.   if (tree.currentIndex < 0) {
  243.     alert("No items are selected."); //This should never happen.
  244.   } else {
  245.     var item = tree.contentView.getItemAtIndex(tree.currentIndex);
  246.     var dbKey = item.firstChild.firstChild.getAttribute('display');
  247.     //  Get the cert from the cert database
  248.     var certdb = Components.classes[nsX509CertDB].getService(nsIX509CertDB);
  249.     var cert = certdb.getCertByDBKey(dbKey,null);
  250.     asn1Tree.loadASN1Structure(cert.ASN1Structure);
  251.   }
  252.   displaySelected();
  253. }
  254.